import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;





public class VisualiseLivre extends Shell {
	
	int ordre = 1 ;
	
	private Table table;
	private Text Erreur;
	private String element ;
	

	
	/**
	 * Create the shell.
	 * @param display
	 */
	public VisualiseLivre(final Display display, int visible) {
		super(display, SWT.SHELL_TRIM);
						
		Group grpChoix = new Group(this, SWT.NONE);
		grpChoix.setText("Choix");
		grpChoix.setBounds(7, 10, 238, 325);
		
		
		Group grpVisualisation = new Group(this, SWT.NONE);
		grpVisualisation.setText("Visualisation");
		grpVisualisation.setBounds(271, 10, 383, 438);
		
		
		Erreur = new Text(this, SWT.BORDER | SWT.CENTER | SWT.MULTI);
		Erreur.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
		Erreur.setBounds(10, 356, 235, 92);
		
		final Label lblVisualisation = new Label(grpVisualisation, SWT.NONE);
		lblVisualisation.setBounds(10, 22, 360, 360);
		
		final TableViewer tableViewer = new TableViewer(grpChoix, SWT.BORDER | SWT.FULL_SELECTION);
		table = tableViewer.getTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				ordre = 1;
				
				org.eclipse.swt.graphics.Point p = new org.eclipse.swt.graphics.Point(e.x,e.y);
				
				element = (String) tableViewer.getCell(p).getElement() ;
				
				String chemin = Livre.afficher(element ,  ordre);
				
				Image imageVisualisation = new Image(display,chemin) ;
				
				imageVisualisation = resize(imageVisualisation,360,360);
				
				lblVisualisation.setImage(imageVisualisation);
				
			}
		});
		table.setBounds(3, 15, 232, 310);
		
		Button btnImageSuivante = new Button(grpVisualisation, SWT.NONE);
		btnImageSuivante.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				Erreur.setText("");
				
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nde livre");
					
				}else {
				
					ordre = ordre + 1;
					
					String chemin = Livre.afficher(element, ordre);
					
					Image imageVisualisation = new Image(display,chemin) ;
					
					imageVisualisation = resize(imageVisualisation,360,360);
					
					lblVisualisation.setImage(imageVisualisation);
				}
				
				
			}
		});
		btnImageSuivante.setBounds(261, 403, 109, 25);
		btnImageSuivante.setText("Image suivante");
		
		Button btnImagePrcdente = new Button(grpVisualisation, SWT.NONE);
		btnImagePrcdente.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent e) {
				
				ordre = ordre - 1;
				
				Erreur.setText("");
				if(element == null){
					
					Erreur.setText("Erreur :\r\nVous n'avez pas choisi \r\nde livre");
					
				}else {
					
					if(ordre <=0 )
					{
						ordre = 1 ;
						Erreur.setText("Erreur :\r\nVous visualisé déja la \r\npremière photo du livre");
						
					}			
					else{
					
					String chemin = Livre.afficher(element, ordre);
					
					Image imageVisualisation = new Image(display,chemin) ;
					
					imageVisualisation = resize(imageVisualisation,360,360);
					
					lblVisualisation.setImage(imageVisualisation);
					
					}
				}
				
			}
		});
		btnImagePrcdente.setText("Image précédente");
		btnImagePrcdente.setBounds(10, 403, 109, 25);
		
		
		createContents();
		
	    // The input will be an array or a collection.
	    // We will need every element of this input.
		tableViewer.setContentProvider( new ArrayContentProvider());

	    // For very element to display, we will display its default string
	    // (i.e. Object#toString()).
		tableViewer.setLabelProvider( new LabelProvider());
	
		Livre.getLivre(visible);
				
	    // Eventually, let's define an input
		List<String> listLivrePublic = Album.getAlbums();
		
		System.out.println(listLivrePublic.toString());
		
	
		tableViewer.setInput( listLivrePublic );
		
		Album.removeAlbum();

	}
	

	/**
	 * Create contents of the shell.
	 */
	protected void createContents() {
		setText("Visualisation Livres publics");
		setSize(680, 496);

	}

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	private Image resize(Image image, int width, int height) {
		
		Image scaled = new Image(Display.getDefault(), width, height);
		GC gc = new GC(scaled);
		gc.setAntialias(SWT.ON);
		gc.setInterpolation(SWT.HIGH);
		gc.drawImage(image, 0, 0, 
		image.getBounds().width, image.getBounds().height, 
		0, 0, width, height);
		gc.dispose();
		image.dispose(); // don't forget about me!
		return scaled;
		}
	

}